/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.notaria.guerrasalas.be;

import com.notaria.guerrasalas.util.UtilGS;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name = "CLIENTE_NATURAL")
@PrimaryKeyJoinColumn(name = "ID_CLIENTE_NATURAL", referencedColumnName = "ID_PERSONA")
@DiscriminatorValue(value = "CN")
public class ClienteNatural
        extends Cliente
        implements Serializable {

    @Column(name = "DOCUMENTO_IDENTIDAD", length = 20)
    private String documentoIdentidad;
    @Enumerated(EnumType.ORDINAL)
    @Column(name = "TIPO_DOCUMENTO_IDENTIDAD")
    private TipoDocumentoIdentidad tipoDocumentoIdentidad;
    @Enumerated(EnumType.ORDINAL)
    @Column(name = "ESTADO_CIVIL")
    private EstadoCivil estadoCivil;
    @Column(name = "OCUPACION", length = 50)
    private String ocupacion;

    @PreUpdate
    @PrePersist
    private void formatearInformacion() {
        setNombres(UtilGS.quitarTildes(getNombres().trim().toUpperCase()));
        setApellidoPaterno(UtilGS.quitarTildes(getApellidoPaterno().trim().toUpperCase()));
        setApellidoMaterno(UtilGS.quitarTildes(getApellidoMaterno().trim().toUpperCase()));
//        setEmail((getEmail() != null) ? getEmail().trim().isEmpty() ? "<<No especificado>>" : getEmail() : "<<No especificado>>");
        setNacionalidad((getNacionalidad() != null) ? getNacionalidad().trim().isEmpty() ? "<<No especificado>>" : getNacionalidad().toUpperCase() : "<<No especificado>>");
        setDireccion(getDireccion() != null ? getDireccion().trim().isEmpty() ? "<<No especificada>>" : getDireccion().trim().toUpperCase() : "<<No especificada>>");
        setOcupacion((getOcupacion() != null) ? getOcupacion().trim().isEmpty() ? "<<No especificado>>" : getOcupacion().toUpperCase() : "<<No especificado>>");
        setFechaActualizacion(new Date());
    }

    public ClienteNatural() {
    }

    public ClienteNatural(Long idClienteNatural) {
        this.idPersona = idClienteNatural;
    }

    public String getDocumentoIdentidad() {
        return documentoIdentidad;
    }

    public void setDocumentoIdentidad(String documentoIdentidad) {
        this.documentoIdentidad = documentoIdentidad;
    }

    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public TipoDocumentoIdentidad getTipoDocumentoIdentidad() {
        return tipoDocumentoIdentidad;
    }

    public void setTipoDocumentoIdentidad(TipoDocumentoIdentidad tipoDocumentoIdentidad) {
        this.tipoDocumentoIdentidad = tipoDocumentoIdentidad;
    }

    public String getOcupacion() {
        return ocupacion;
    }

    public void setOcupacion(String ocupacion) {
        this.ocupacion = ocupacion;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Persona other = (Persona) obj;
        if (this.idPersona != other.idPersona && (this.idPersona == null || !this.idPersona.equals(other.idPersona))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 19 * hash + (this.idPersona != null ? this.idPersona.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "com.notaria.guerrasalas.be.ClienteNatural[idClienteNatural=" + idPersona + "]";
    }

    @Override
    public String getNombreCompleto() {
        return getNombres() + " " + getApellidoPaterno() + " " + getApellidoMaterno();
    }

    @Override
    public String getDocumentoIdentificacion() {
        return getTipoDocumentoIdentidad().toString() + ": " + getDocumentoIdentidad();
    }
}
